package util;

import java.util.Calendar;
import java.util.Date;
import java.util.Random;

public class MathUtil {

	private static Random rand = new Random();

	private static Calendar granica = Calendar.getInstance();
	
	static {
		granica.set(2011, 11, 1);
	}
	
	// Do tej daty beda stosowane wszystkie generatory
	public static final Calendar DATA_KONCOWA = Calendar.getInstance();

	static {
		DATA_KONCOWA.set(2011, 10, 10);
	}
	
	
	// Losuje doubla z dwoma miejsami po przecinku od do, np 8.24, 3.62
	// BTW: do jest slowem kluczowym :)
	public static double losujProcent(int od, int doo){
		
		double oproc = (double)(rand.nextInt(doo - od) + od) + rand.nextDouble();
		oproc = MathUtil.zaokraglijDoDwochMiejsc(oproc);
		
		return oproc;
		
	}
	// procent dziesietny np. 0.824, 0.214
	public static double losujProcentDziesietny(int od, int doo){
		double procent = losujProcent(od,doo);
		
		return procent / 100;
	}
	
	// Zwraca inta od-do
	public static int losujInta(int od, int doo){
	
		return rand.nextInt(doo - od + 1) + od;
		
	}
	
	
	public static double nextDouble(){
		return rand.nextDouble();
	}
	/*
	 *  Losuje date, w latach dataUrodzenia + 18 do 2010 roku
	 */
	public static Date losujDate(Date dataUrodzenia){
		
		Calendar nowa = Calendar.getInstance();
		nowa.setTime(dataUrodzenia);
	
		int lataDodane = 18 + losujInta(0, 2010 - nowa.get(Calendar.YEAR) - 18);
	
		nowa.set(Calendar.DAY_OF_MONTH, rand.nextInt(28) + 1);
		nowa.set(Calendar.MONTH, rand.nextInt(12) + 1);
		nowa.set(Calendar.YEAR, nowa.get(Calendar.YEAR) + lataDodane);
		
		Date d  = new Date();
		d.setTime(nowa.getTimeInMillis());

		return d;
	}
	
	
	public static int dajIloscMscDo2011(Date data){
		
		Calendar dataPocz = Calendar.getInstance();
		dataPocz.setTime(data);
		
		//Grudzien 2011
		Calendar dataGraniczna = Calendar.getInstance();
		dataGraniczna.set(2011, 11, 1);
		
		long milis = dataGraniczna.getTimeInMillis() - dataPocz.getTimeInMillis();

		return (int)(( milis / ( 1000 * 60 * 60 * 24) / 30 ));
	}
	
	
	public static Date konwertujCalendarNaDate(Calendar c){
		
		Date d = new Date();
		
		d.setTime(c.getTimeInMillis());
		
		return d;
	}
	

	
	private static double zaokraglijDoDwochMiejsc(double liczba){
		
		int l = (int)(liczba * 100);
		
		return ((double)l/100);
		
	}
	
	
	
	
}
